package reflect;
import java.lang.reflect.Method;
/**
 * 通过反射机制访问类的私有成员
 * 暴力反射
 */
public class ReflectDemo7 {
    public static void main(String[] args) throws Exception {
        /*
        Person p = new Person();
        p.hehe(); //编译错误，不能访问私有方法
         */
        Class cls = Class.forName("reflect.Person");
        Object obj = cls.newInstance(); //Person obj = new Person();
        /*
         getMethod()和getMethods():
         获取该类中的公开方法，包括从超类继承的

         getDeclaredMethod()和getDeclaredMethods():
         获取该类中的所有方法，包括私有的，但不包括从超类继承的
         */
        //Method method = cls.Method("hehe"); //运行时发生异常，因为Method()只能获取公开方法
        Method method = cls.getDeclaredMethod("hehe");
        method.setAccessible(true); //强制打开访问权限
        method.invoke(obj); //调用hehe()方法
        method.setAccessible(false); //关闭访问权限
    }
}















